[問題] 如何把多行內的多個column當成參數執行

看板Linux作者 (玻璃做的大叔)時間7年前 (2016/10/09 10:06), 7年前編輯推噓2(2016)
留言18則, 6人參與, 最新討論串1/1
我有從別的來源的紀錄譬如 時間;檔名 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%或是一個人不炒房價,就會改變整體環境嗎? 還不如改變【修改制度的人】,才能從根源改變一切。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.176.32.99 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1475978798.A.C49.html ※ 編輯: LIAR (180.176.32.99), 10/09/2016 10:08:22

10/09 14:04, , 1F
如果欄位沒有什麼意外 我想法是把;和\n都換成\0再用xargs
10/09 14:04, 1F

10/09 14:05, , 2F
tr '\n;' '\0'<input.txt|xargs -0 -n2 bash -c 'touch -
10/09 14:05, 2F

10/09 14:05, , 3F
d $0 "$1"'
10/09 14:05, 3F

10/09 14:07, , 4F
tr '\n;' '\0'<input.txt|xargs -0 -n2 touch -d
10/09 14:07, 4F

10/09 14:07, , 5F
如果沒要換順序的話可以這樣寫
10/09 14:07, 5F

10/09 19:09, , 6F
awk -F';' '{print "touch -d "$1" \""$2"\""}'
10/09 19:09, 6F

10/09 19:25, , 7F
如果欄位資料有跨行,那需要'BEGIN{RS=某}'修正
10/09 19:25, 7F

10/09 20:31, , 8F
用 read 寫迴圈一行一行讀
10/09 20:31, 8F

10/10 01:55, , 9F
我都用 awk printf 出指令,pipe 給 sh -
10/10 01:55, 9F

10/11 11:38, , 10F
IFS=';'
10/11 11:38, 10F

10/11 11:39, , 11F
while read one two three others
10/11 11:39, 11F

10/11 11:40, , 12F
do echo "$one,$two,$three,$others"
10/11 11:40, 12F

10/11 11:40, , 13F
done < 要讀入的檔案
10/11 11:40, 13F

10/11 11:41, , 14F
unset IFS
10/11 11:41, 14F

10/11 11:42, , 15F
第一個欄位會存入one, 第二個會存入 two, ...
10/11 11:42, 15F

10/11 11:42, , 16F
read 後面接四個變數,第一二三欄位會存入前三個變數,
10/11 11:42, 16F

10/11 11:43, , 17F
第四個欄位及以後會存入第四個變數
10/11 11:43, 17F

10/22 23:15, , 18F
感謝各位
10/22 23:15, 18F
文章代碼(AID): #1N-QOkn9 (Linux)