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

作者: LIAR (玻璃做的大叔)   2016-10-09 10:06:33
我有從別的來源的紀錄譬如
時間;檔名
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會一直變化,如果每次都這樣就工程浩大了。
作者: ckc1ark (偽物)   2016-10-09 14:04:00
如果欄位沒有什麼意外 我想法是把;和\n都換成\0再用xargstr '\n;' '\0'<input.txt|xargs -0 -n2 bash -c 'touch -d $0 "$1"'tr '\n;' '\0'<input.txt|xargs -0 -n2 touch -d如果沒要換順序的話可以這樣寫
作者: losepacific (Losepacific)   2016-10-09 19:09:00
awk -F';' '{print "touch -d "$1" \""$2"\""}'如果欄位資料有跨行,那需要'BEGIN{RS=某}'修正
作者: HamalAri (哈馬‧阿里)   2016-10-09 20:31:00
用 read 寫迴圈一行一行讀
作者: rickieyang (Rickie Yang)   2016-10-10 01:55:00
我都用 awk printf 出指令,pipe 給 sh -
作者: changyj (龍門少尉)   2016-10-11 11:38:00
IFS=';'while read one two three othersdo echo "$one,$two,$three,$others"done < 要讀入的檔案unset IFS第一個欄位會存入one, 第二個會存入 two, ...read 後面接四個變數,第一二三欄位會存入前三個變數,第四個欄位及以後會存入第四個變數
作者: LIAR (玻璃做的大叔)   2016-10-22 23:15:00
感謝各位

Links booklink

Contact Us: admin [ a t ] ucptt.com