2017-10-28 30 views
-1

我有一個bash文件,在第一列和後面的一些文本中增加了整數。Bash:csv文件中的集中行(1 + 2,3 + 4等)

1,text1a,text1b 
2,text2a,text2b 
3,text3a,text3b 
4,text4a,text4b 
... 

我想添加行1 + 2,3 + 4等,並將結果添加到一個新的csv文件。

所需的輸出將是

1,text1a,text1b,2,text2a,text2b 
3,text3a,text3b,4,text4a,text4b 
... 

第二選項而不號碼將是巨大的,以及。實際的投入將是

1,text,text,,,[email protected],2,text.text,text 
2,text,text,,,[email protected],3,text.text,text 
3,text,text,,,[email protected],2,text.text,text 
4,text,text,,,[email protected],3,text.text,text 

期望的結果

text,text,,,[email protected],2,text.text,text,text,text,,,[email protected],3,text.text,text 
text,text,,,[email protected],2,text.text,text,text,text,,,[email protected],3,text.text,text 
+0

你是什麼意思沒有數字?你的輸入和輸出都有數字! – karakfa

+0

剛剛更新了問題。現在希望它更清楚。 – user3550552

+0

'xargs -L2

回答

1
$ pr -2ats, file 

給你

1,text1a,text1b,2,text2a,text2b 
3,text3a,text3b,4,text4a,text4b 

UPDATE

第二部分

$ cut -d, -f2- file | pr -2ats, 

會給你

text,text,,,[email protected],2,text.text,text,text,text,,,[email protected],3,text.text,text 
text,text,,,[email protected],2,text.text,text,text,text,,,[email protected],3,text.text,text 
+0

幾乎在那裏。對我來說,它刪除了第一個數字,但是爲例子返回了3行(1 + 2在一行中,3和4在單行中)。 – user3550552

+0

is is not possible with the is script,check your line endings,you might have a extra carriage return('\ r') – karakfa

+0

這是否可能只發生非空行?它看起來像最後一個空行是Unix標準的一部分? – user3550552

2

AWK解決方案:

awk '{ printf "%s%s",$0,(!(NR%2)? ORS:",") }' input.csv > output.csv 

output.csv內容:

1,text1a,text1b,2,text2a,text2b 
3,text3a,text3b,4,text4a,text4b 

----------

附加的方法(跳過編號):

awk -F',' '{ printf "%s%s",$2 FS $3,(!(NR%2)? ORS:FS) }' input.csv > output.csv 

output.csv內容:

text1a,text1b,text2a,text2b 
text3a,text3b,text4a,text4b 

第三方法(用於您的擴展輸入):

awk -F',' '{ sub(/^[0-9]+,/,"",$0); printf "%s%s",$0,(!(NR%2)? ORS:FS) }' input.csv > output.csv 
+0

第一種解決方案效果很好,但第二種方法似乎對我無效。有些部分似乎被切斷。指定。我在一些文本字段中有一些空的字段和點。兩行示例輸入:1,文本,文本,,, text @ text.com,2,text.text,text和 2,文本,文本,,, text @ text.com,3,text.text,text – user3550552

+0

@ user3550552,因爲你沒有在第一時間提到你的問題 – RomanPerekhrest

+0

@ user3550552,更新你的問題與** 2nd **案例 – RomanPerekhrest

1

使用bash,剪切,sed和粘貼:

paste -d, <(cut -d, -f 2- file | sed '2~2d') <(cut -d, -f 2- file | sed '1~2d') 

輸出:

text1a,text1b,text2a,text2b 
text3a,text3b,text4a,text4b 
0

我希望開始使用一些簡單的

printf '%s,%s\n' $(<inputfile) 

這證明錯了,當你有你的文字裏的空格領域。 的改善是相當一個爛攤子:

source <(echo "printf '%s,%s\n' $(sed 's/.*/"&"/' inputfile|tr '\n' ' ')") 

跳過第一次提出可以在同sed命令來完成:

source <(echo "printf '%s,%s\n' $(sed -r 's/([^,]*),(.*)/"\2"/' inputfile|tr '\n' ' ')") 

編輯: 當它有特殊字符這個解決方案會失敗,所以你應該使用一個簡單的解決方案

cut -f2- file | paste -d, - - 
相關問題