2つのファイルを1行ずつ比較する必要があります。私は他の行だけを出力したいのですが、違いを判断するときは、文字4-6と10-12は無視する必要があります。特定のフィールド区切り記号などはありません。
例:
- ファイル1
abc123def999 ghi456klm999 nop789qrs999
- ファイル2
abc000def000 xxx000yyy000 nop000qrs000
この例では、2番目の行だけが異なる必要があります。
read
ファイルには何百万ものレコードがあるため、ループがファイルを1行ずつ解析することは望ましくありません。
ベストアンサー1
GNU awkをFIELDWIDTHSパラメータとして使用する:
$ paste file[12] |
awk -v FIELDWIDTHS='3 3 3 3 1 3 3 3 3' '$1!=$6 || $3!=$8'
ghi456klm999 xxx000yyy000
paste
ここでは、2つのファイルを並べて貼り付けるコマンドを使用します。次に、awkのFIELDWIDTHSパラメーターを使用してフィールド長を定義するため、2つのファイルの行が固定長であると仮定し、ここで関連フィールドの違いを比較します。一行ずつ行われます。
または、すべてのシェルで awk を使用します。
$ paste file[12] |
awk 'function key(s){return substr(s,1,3) substr(s,7,3)} key($1) != key($2)'
ghi456klm999 xxx000yyy000