Bashでawk / sedコマンド間にタブスペースを追加する方法

Bashでawk / sedコマンド間にタブスペースを追加する方法

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値です。)0lloginName:

関連情報