如何把多行內的多個column當成參數執行 - Linux

Table of Contents

我有從別的來源的紀錄譬如

時間;檔名
201610060820.18;pic1.tif
201610060820.29;pic5.tif
這樣,我想執行touch -d $1 "$2"

或是
num1;num2;sda
0;31;sda
100;128;sda
2047;1;sdb
想執行
dd if=/dev/$3 of=/tmp/$3_$1-$2 skip=$1 count=$2
然後讀出特定位置到檔案

那個$1 $2就是對應column的順序

問題是我如果直接用cut -d ';' -f 1
一開始就有問題,我推測是一開始$1就好幾行造成的,
所以我想到的是用迴圈一次sed印出一行→cut不同column指定到變數→指令+變數

我想請問有沒有更短的方式,從資料讀出→擺上需要的文字後,直接執行?


我目前是用文書軟體把每一個column切下,前後擺上指令框架合併,貼成script
再執行,不過那些database會一直變化,如果每次都這樣就工程浩大了。

--
"Don't hate the player. Hate the game."
當看到哪個名人賺了大錢,領到高額補助或利息,不要去指責他,
而是要指責那個制度、創造那個制度的人,以及默許那個制度的人。

不然你認為一個人不領18%或是一個人不炒房價,就會改變整體環境嗎?
還不如改變【修改制度的人】,才能從根源改變一切。

--

All Comments

Rae avatarRae2016-10-11
如果欄位沒有什麼意外 我想法是把;和\n都換成\0再用xargs
Emily avatarEmily2016-10-15
tr '\n;' '\0'<input.txt|xargs -0 -n2 bash -c 'touch -
d $0 "$1"'
Tom avatarTom2016-10-18
tr '\n;' '\0'<input.txt|xargs -0 -n2 touch -d
如果沒要換順序的話可以這樣寫
Joseph avatarJoseph2016-10-20
awk -F';' '{print "touch -d "$1" \""$2"\""}'
Daniel avatarDaniel2016-10-23
如果欄位資料有跨行,那需要'BEGIN{RS=某}'修正
Tracy avatarTracy2016-10-27
用 read 寫迴圈一行一行讀
Gary avatarGary2016-10-31
我都用 awk printf 出指令,pipe 給 sh -
Yedda avatarYedda2016-10-31
IFS=';'
Suhail Hany avatarSuhail Hany2016-11-01
while read one two three others
Liam avatarLiam2016-11-02
do echo "$one,$two,$three,$others"
done < 要讀入的檔案
Puput avatarPuput2016-11-05
unset IFS
Eartha avatarEartha2016-11-07
第一個欄位會存入one, 第二個會存入 two, ...
read 後面接四個變數,第一二三欄位會存入前三個變數,
Jack avatarJack2016-11-07
第四個欄位及以後會存入第四個變數
Poppy avatarPoppy2016-11-11
感謝各位