2

私は awk が初めてで、以下のファイルの 2 つのフィールドを比較するステートメントを見つける必要があります。

1.csv
_________
1space, aspace

2,b

space3space,c

2.csv
____________
1space,spacea   

space2,bspace
3,spacecspace

1.tsv または 2.tsv のいずれかのフィールドに先頭またはトレーニング スペースがない場合、以下のステートメントは正常に機能します。

nawk -F, 'NR==FNR{a[$1,$2]++;next} !(a[$1,$2])'  2.tsv 1.tsv

上記のステートメントを変更して、先行スペースと遅延スペースを削除し、比較する方法を教えてください。助けてくれてありがとう。

4

4 に答える 4

2

GNU のコード:

sed -r 's#\s*(\S+)\s*,\s*(\S+)\s*#/\\s*\1\\s*,\\s*\2\\s*/p#' file1|sed -f - file2
$cat ファイル 1
1 、
2,b
 3、c

$猫ファイル2
1、a
 2,b
3,c
$sed -r 's#\s*(\S+)\s*,\s*(\S+)\s*#/\\s*\1\\s*,\\s*\2\\s */d#' file1|sed -nf - file2

于 2013-06-29T11:25:27.213 に答える
2
awk -F, '
{ key=$1; gsub(/^[[:space:]]+|[[:space:]]+$/,"",key) }
NR==FNR { a[key]; next }
!(key in a)
' 2.tsv 1.tsv
于 2013-06-28T17:01:52.857 に答える
1

$1array で検索する前に、すべてのスペースを削除する必要がありますa

awk -F"," 'NR==FNR{$1=$1;a[$1]++;next} {f1=$1; gsub(/ /, "", f1); 
           if (!a[f1]) print}'  2.tsv 1.tsv
于 2013-06-28T13:06:53.220 に答える