2つのテキストファイルがあります
CatA.txt
10,1,1,"ABC"
10,1,2,"S1"
10,1,2,"ABC"
10,1,3,"baba"
10,2,1,"S2"
10,2,1,"asd"
10,2,2,"S3"
10,2,2,"dkkd"
10,2,3,"ABC"
catB.txt
10,1,1,"ABC1"
10,1,2,"S1"
10,1,2,"ABC"
10,1,3,"baba"
10,2,1,"asd"
10,2,2,"S3"
10,2,2,"dkkd"
10,2,4,"bokaj"
2つのテキストファイルを読み込んで不足しているフィールドを見つけ、「」で2つのファイルを不足しているフィールドで埋め、2つの新しい修正ファイルに保存したいと思います。このドアをどのように取得できますか?
A1.txtはA.txtの修正版です。
catA1.txt
10,1,1,"ABC"
10,1,2,"S1"
10,1,2,"ABC"
10,1,3,"baba"
10,2,1,"S2"
10,2,1,"asd"
10,2,2,"S3"
10,2,2,"dkkd"
10,2,3,"ABC"
10,2,4," "
B1.txtはB.txtの修正版です。
catB1.txt
10,1,1,"ABC1"
10,1,2,"S1"
10,1,2,"ABC"
10,1,3,"baba"
10,2,1," "
10,2,1,"asd"
10,2,2,"S3"
10,2,2,"dkkd"
10,2,3," "
10,2,4,"bokaj"
A1.txt の行の総数が B1.txt の行数と同じであることを確認します。私はbashを初めて使用するので、あなたの答えと説明が理解するのに多くの助けになるかもしれません。
これまでに試したMWEは次のとおりです。
#!/bin/bash
cut -d ',' -f1,2,3 A.txt > A1.txt
cut -d ',' -f1,2,3 B.txt > B1.txt
## Command to print contents which are in B1.txt but not in A1.txt
A=`awk 'NR==FNR{a[$0];next} !($0 in a)' A1.txt B1.txt`
echo $A,'" "' >> A.txt
sort A.txt
## Command to print contents which are in A1.txt but not in B1.txt
B=`awk 'NR==FNR{a[$0];next} !($0 in a)' B1.txt A1.txt`
echo $B,'" "' >> B.txt
sort B.txt
答え1
diff
それならsort
ここで役に立つかもしれませんね。
例のように、ファイルA.txt
とB.txt
その同伴アイテムA1.txt
とファイルがすでに設定されている場合は、次の手順を実行します。B1.txt
diff --unchanged-line-format= --old-line-format= --new-line-format='%l," "'%c\'\\12\' A1.txt B1.txt | sort -st , -k 1,3 A.txt -
そして:
diff --unchanged-line-format= --old-line-format= --new-line-format='%l," "'%c\'\\12\' B1.txt A1.txt | sort -st , -k 1,3 B.txt -
これにより、説明する出力が生成されます。
答え2
grep -vFf B.txt A.txt | sed 's/".*"/" "/' | sort -st, -k1,3 - B.txt
結果(B1.txt):
10,1,1," "
10,1,1,"ABC1"
10,1,2,"S1"
10,1,2,"ABC"
10,1,3,"baba"
10,2,1," "
10,2,1,"asd"
10,2,2,"S3"
10,2,2,"dkkd"
10,2,3," "
10,2,4,"bokaj"
ABC
最初の行はあなたの例とは異なりますがABC1
。