Linux

如何在 bash 中的 awk / sed 命令之間添加製表符空間

  • February 22, 2019

我有兩條單獨的線被合併到一條線上。問題是目前,它被一個空格隔開。我想知道如何將兩行分隔為一行,並使用製表符間距。

這是我目前擁有的程式碼:

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:行。)

引用自:https://unix.stackexchange.com/questions/502329