이 awk
사용은 :
awk -F' ' 'NR == FNR { a[$1] = a[$1] $2 ORS } { t = $0; sub(/[[:blank:]]+$/, "", t) } t in a { printf "%s", a[t] > t }' file2 file1
또는 안전 (두 번째 열)에 데이터를 이중 공간이있는 경우에도 :
awk 'BEGIN { FS = OFS = " " } NR == FNR { t = $1; $1 = ""; sub(/^[[:blank:]]+/, ""); a[t] = a[t] $0 ORS } { t = $0; sub(/[[:blank:]]+$/, "", t) } t in a { printf "%s", a[t] > t }' file2 file1
그리고 bash
를 사용하여 :
#!/bin/bash
FILE1=$1
FILE2=$2
[ -n "$BASH_VERSION" ] && [[ BASH_VERSINFO -ge 4 ]] || exit 1
shopt -s extglob
declare -A MAP=()
declare -A FLAGS=()
IFS=$' \t\n' ## Use normal IFS.
while read -r LINE; do
NAME=${LINE%% *}
DATA=${LINE#* }
MAP[$NAME]=${MAP[$NAME]}$DATA$'\n'
done < "$FILE2"
while read -r NAME; do
((! FLAGS[$NAME]++)) && : > "$NAME"
echo -n "${MAP[$NAME]}" >> "$NAME"
done < "$FILE1"
사용법 : 난 당신의 코드를 이해하기 위해 노력하고있어
bash script.sh file1 file2
. 파일 1의 코드가 의심스러워 보입니다. 이 구문을 사용하여 알고있는 언어가 없습니다. 그게 입력이라고 가정합니다. 파일 2의 코드는'sql' 문과 비슷하지만 select 문 앞에있는 코드는 나를 망쳤습니다. 코드를 다시 포맷하십시오. 그러면 코드를 디버그하고 응답을 게시합니다. – alvits
안녕하세요 @ alvits, 파일 1은 .txt 대신 .sh 확장명을 가진 모든 파일 이름을 포함하고 파일 2는 파일 1에 부여 된 모든 파일 이름에 대한 항목을 가지고 있습니다. 실제로 실수로 BBB에 대한 항목을 놓쳤습니다. – Vetri