![Unixでawkを使用してテキストファイルの奇数フィールドを印刷するには? [閉鎖]](https://linux33.com/image/59332/Unix%E3%81%A7awk%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%A5%87%E6%95%B0%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%82%92%E5%8D%B0%E5%88%B7%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
私の要件は間違いなく役に立ちますが、与えられた答えを理解することはできません。
awk -F\| '{s="";for (i=1;i<=NF;i+=2) {s=s?s FS $i:$i} print s}' file
これは何を{s=s?s FS $i:$i} print s}
しますか?希望の出力をどのように印刷しますか?私はこれが三項演算子が使用されていることを知っています。しかし、式を評価して出力を印刷する方法は?
答え1
if-then-elseと考えてください
{s=s?s FS $i:$i}
次のように評価
{ if ( s != "" ) s=s FS $i ; ## i=3,5,7,...
else s=$i ; } ## i=1
これはあいまいなコードのように見えます。
awk -F\| '{s="";for (i=1;i<=NF;i+=2) {s=s?s FS $i:$i} print s}' file
(最も理解しやすい)
awk -F\| '{s=$1;for (i=3;i<=NF;i+=2) {s=s FS $i} print s}' file