[问题] 如何把多行内的多个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