
file.txt
2つのスクリプトがありますfile2.txt
ファイル1.txt
|col1|col2|
|name|mandatory|
|age|mandatory|
|address|mandatory|
|email|mandatory|
|country|not-mandatory|
ファイル2.txt
|col1|col2|
|name|gabrielle|
|age||
|address|nashville|
|email|[email protected]|
|country||
その列が強制されるfile1のすべての行を取得するには、一時ファイルを作成する必要があります。次に、file2に記載されている必須フィールドが空であることを確認する必要があります。
予想出力:
age mandatory
答え1
以下を使用できますawk
。
awk -F '|' '
NR==FNR && $3=="mandatory" {m[$2]++}
NR>FNR && $3=="" && m[$2] {printf "%s mandatory\n", $2}
' file1.txt file2.txt
出力
age mandatory
説明する
awk
両方のファイルの各行を繰り返します。レコード区切り文字が考慮されます|
。これは、最初のフィールドが常に空であることを意味します。
file1.txt
スクリプトの最初の行は、3番目のフィールド(これまでに読み取られたレコードの数は現在のファイルの行番号と一致します)がある行をNR
探し、mandatory
2番目のフィールドを配列に格納します。
スクリプトの 2 行目は行file2.txt
(現在のファイルの行番号より読み取ったレコード数) を探し、3 番目のフィールドが空で、以前に作成したリストにある場合は、最初のフィールドの名前を印刷します。