我有一個 excel,我在我的 shell 腳本中使用它,我的資料就像
ColumnName1
NameOfAnObject1
100
NameOfAnObject2
200
我的要求是擁有如下資料
ColumnName1 ColumnName2
NameOfAnObject1 100
NameOfAnObject2 200
我嘗試使用以下命令獲取資料
awk '{getline nextLine; print nextLine,$1}' OFS="," file.csv
但我得到的輸出是
ColumnName1
NameOfAnObject1,100
NameOfAnObject2,200
uj5u.com熱心網友回復:
這可能是你想要做的:
$ awk -v OFS='\t' 'NR==1{p=$1; sub(/1$/,2,$1)} NR%2{print p, $1} {p=$1}' file
ColumnName1 ColumnName2
NameOfAnObject1 100
NameOfAnObject2 200
如果您正在考慮使用getline,請閱讀http://awk.freeshell.org/AllAboutGetline以了解您可能不應該使用的原因,就像在這種情況下一樣。
上面的腳本只是在第一列標題的末尾替換1為2,所以它只會復制列名的前導部分,而不是硬編碼我們認為應該的內容。
uj5u.com熱心網友回復:
如果您的資料始終按照描述進行格式化,您可以執行以下操作:
(為清楚起見,用換行符格式化)。
awk '
BEGIN { # print headers and set separator
OFS="\t";
print "ColumnName1", "ColumnName2"
}
NR>1{ # skip first line which is header
getline N; # read first col, this continues to next line
print $0, N; # print the line and data from line before
N=""} # ..do not keep the previous line anymore
' file.csv
ColumnName1 ColumnName2
NameOfAnObject1 100
NameOfAnObject2 200
最后一個設定 N="" 是為了避免在檔案末尾有 N 的剩余輸出(如果您的檔案以換行符結尾。)
uj5u.com熱心網友回復:
例如,如果您的輸入file.sample如下:
ColumnName1
NameOfAnObject1
100
NameOfAnObject2
200
那么你可以試試one-liner這個sed:
sed -i '2i ColumnName2' file.sample && cat file.sample | sed 'N;s/\n/\t/g' > file.csv
如果你cat是file.csv,你應該得到:
ColumnName1 ColumnName2
NameOfAnObject1 100
NameOfAnObject2 200
awk\t如果您這樣做,則正確解釋為欄位分隔符:
awk -F"\t" '{ print $1 }' file.csv
輸出:
ColumnName1
NameOfAnObject1
NameOfAnObject2
uj5u.com熱心網友回復:
使用sed
$ sed '1s/\([^0-9]*\).*/&\t\12/;1!{/^[A-Z]/{N;s/\n/\t/g}}' input_file
ColumnName1 ColumnName2
NameOfAnObject1 100
NameOfAnObject2 200
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/471508.html
