2つの別々の行が1つにマージされました。問題は、現在空白で区切られていることです。タブ間隔を置いて2行を1つに分割する方法を知りたいです。
現在私が持っているコードは次のとおりです。
awk '/^loginName:/{x=NR+1}(NR<=x){print}'\t FinalResults.txt| sed "N;s/\n/ /g"
タブコマンドはですが、%\t
正確にどこに行くのでしょうか?また、現在のコーディングを分析し、すべての機能と目的が何であるかを詳しく説明しますか?私はbashの仕組みを学びようとしています。
追加情報:この質問は次の回答に関連しています。https://unix.stackexchange.com/a/502156/330217。入力ファイルはFinalResults.txt
他の質問に示されているものと同じです。
答え1
スクリプトは、内容に関係なく、awk
で始まるすべての行loginName:
とその直後の行を印刷します。
/^loginName:/{x=NR+1} # for matching lines store the record (line) number +1 into x
(NR<=x){print} # The condition will be true for the line matching the pattern above and the following line.
sed
とのマニュアルを読んでくださいawk
。バラよりhttps://stackoverflow.com/q/6255796/10622916sed
コマンドのためにN
。
コマンドをsed
次のように置き換えます。
sed "N;s/\n/\t/g"
行を区切るには、スペースの代わりにタブを使用してください。
またはawk
スクリプトを変更してみてください
awk '/^loginName:/{x=NR+1;l=$0}NR==x{print l "\t" $0}' FinalResults.txt
そしてsed
コマンドを省略します。
短くしたい場合
awk 'l{print l"\t"$0;l=0}/^loginName:/{l=$0}' FinalResults.txt
しかし、短いスクリプトは理解するのが難しいかもしれません。
(ここで出力される条件は空ではなく、行が保存されていないl
値です。)0
l
loginName: