第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

一種在Bash中轉(zhuǎn)換文件的有效方法

一種在Bash中轉(zhuǎn)換文件的有效方法

蕪湖不蕪 2019-06-25 17:21:58
一種在Bash中轉(zhuǎn)換文件的有效方法我有一個(gè)巨大的選項(xiàng)卡分隔文件,格式如下X column1 column2 column3 row1 0 1 2row2 3 4 5row3 6 7 8row4 9 10 11我想轉(zhuǎn)座子它以一種高效的方式使用bash命令(我可以編寫十行左右的Perl腳本來完成這個(gè)任務(wù),但是它的執(zhí)行速度應(yīng)該比本機(jī)bash函數(shù)慢)。所以輸出應(yīng)該看起來像X row1 row2 row3 row4 column1 0 3 6 9column2 1 4 7 10column3 2 5 8 11我想出了這樣的解決方案cols=`head -n 1 input | wc -w`for (( i=1; i <= $cols; i++))do cut -f $i input | tr $'\n' $'\t' | sed -e "s/\t$/\n/g" >> outputdone但這是緩慢的,似乎不是最有效的解決辦法。我看到了vi的解決方案這個(gè)職位但還是太慢了。有什么想法/建議/絕妙的想法嗎?
查看完整描述

3 回答

?
有只小跳蛙

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊

另一個(gè)選擇是使用rs:

rs -c' ' -C' ' -T

-c更改輸入列分隔符,-C更改輸出列分隔符,以及-T移動(dòng)行和列。不使用-t而不是-T,因?yàn)樗褂昧送ǔ2徽_的自動(dòng)計(jì)算的行數(shù)和列數(shù)。rs它是以APL中的改型功能命名的,帶有BSD和OSX,但是它應(yīng)該可以從其他平臺(tái)的包管理器獲得。

第二個(gè)選擇是使用Ruby:

ruby -e'puts readlines.map(&:split).transpose.map{|x|x*" "}'

第三種選擇是使用jq:

jq -R .|jq -sr 'map(./" ")|transpose|map(join(" "))[]'

jq -R .將每個(gè)輸入行打印為JSON字符串文本,-s (--slurp)將每一行解析為JSON后,為輸入行創(chuàng)建一個(gè)數(shù)組,以及-r (--raw-output)輸出字符串的內(nèi)容,而不是JSON字符串文本。這個(gè)/運(yùn)算符重載為拆分字符串。


查看完整回答
反對 回復(fù) 2019-06-25
?
揚(yáng)帆大魚

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊

Python解決方案:

python -c "import sys; print('\n'.join(' '.join(c) for c in zip(*(l.split() for l in sys.stdin.readlines() if l.strip()))))" < input > output

上述情況的依據(jù)如下:

import sysfor c in zip(*(l.split() for l in sys.stdin.readlines() if l.strip())):
    print(' '.join(c))

這段代碼確實(shí)假設(shè)每一行都有相同數(shù)量的列(不執(zhí)行填充)。


查看完整回答
反對 回復(fù) 2019-06-25
  • 3 回答
  • 0 關(guān)注
  • 441 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號