Linux
如何在 bash 中的 awk / sed 命令之間添加製表符空間
我有兩條單獨的線被合併到一條線上。問題是目前,它被一個空格隔開。我想知道如何將兩行分隔為一行,並使用製表符間距。
這是我目前擁有的程式碼:
awk '/^loginName:/{x=NR+1}(NR<=x){print}'\t FinalResults.txt| sed "N;s/\n/ /g"
我看到 tab 命令是
%\t
,但是這到底會去哪裡?另外,您能否分解目前的編碼並詳細解釋所有內容的作用以及目的是什麼,因為我正在嘗試了解 bash 的工作原理。附加資訊:問題與此答案有關:https ://unix.stackexchange.com/a/502156/330217 。輸入文件
FinalResults.txt
與另一個問題中所示的相同。
該
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/10622916 。sed``N
將
sed
命令替換為sed "N;s/\n/\t/g"
用 Tab 而不是空格分隔行。
或更改
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
是非空和 not的值0
,並l
儲存該loginName:
行。)