この5つの列を持つtxtファイルがあります。
F1 rsfldo4pw F5 ABC POG
F2 rsfcl2eou F6 ABD POF
F3 rsfceleou F7 ABG POE
ABD
列4があり、列5がPOF
上記の例と同じ場合は、列2の単語を印刷するテキストファイルの結果が必要ですrsfcl2eou
。
このコードを使用しましたが、動作しません。編集するのに役立ちますか?
'{if ( ($4=="ABD" && $5=="POF")
|| ($4=="ABG" && $5=="POE")
|| ($4=="ABK" && $5=="POJ")
|| ($4=="ABT" && $5=="POB")) print $2, "eltext" ;
else print $2;}' ${DataFile.txt} |
grep -v eltex > ${tempo.txt}
答え1
列に基づく行のフィルタリング
awk '$4 == "ABC" && $5 == "DEF" '
フィールド2万印刷
awk '$4 == "ABC" && $5 == "DEF" { print $2} '
複数の条件で
awk '$4 == "ABC" && $5 == "DEF" { print $2}
$4 == "XYZ" && $5 == "GHI" { print $2} '
基準と一致しない行は無視され、追加のアクションはありません。grep -v
リダイレクトと変数
${datafile.txt}
次に拡張されないことを参照してください。datafile.txt
次のいずれかを使用してください。
awk '... ' input.txt > output.txt
または
input="Datafile.txt"
output="Exportfile.txt"
awk '...' ${input} > ${output}
特殊文字がある場合は変数を引用できます。
awk '...' "${input}" > "${output}"
答え2
awk '(($4 " " $5 == "ABD POF") ||
($4 " " $5 == "ABG POE") ||
($4 " " $5 == "ABK POJ") ||
($4 " " $5 == "ABT POB")) { print $2 }' DataFile.txt > exportfile.txt
これは、$ 4と$ 5の接続を一致させる2つの3文字の文字列接続と比較して少し簡単になります。
また、Archemarの回答から4つの重複コードブロックのうち3つを削除します(例{print $2}
:)。バラより繰り返さないでください同じプログラムで同じコードの複数のコピーを避けるのが一般的に良い理由の簡単な要約です。
ABDとPOE、POJ、POBなど、入力に$ 4と$ 5の組み合わせがないと絶対に確信している場合いいえ一致させるには、4つの固定文字列一致の代わりに単一の正規表現一致を使用できます。
awk '$4 " " $5 ~ /^AB[DGKT] PO[FEJB]$/ {print $2}' DataFile.txt > exportfile.txt
これは一致みんなリストされている4つの組み合わせだけでなく、ABの後にD、G、K、またはTが続き、POの後にF、E、J、またはBが続く組み合わせです。