作者LIAR (玻璃做的大叔)
看板Linux
标题[问题] 如何把多行内的多个column当成参数执行
时间Sun Oct 9 10:06:33 2016
我有从别的来源的纪录譬如
时间;档名
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://webptt.com/cn.aspx?n=bbs/Linux/M.1475978798.A.C49.html
※ 编辑: LIAR (180.176.32.99), 10/09/2016 10:08:22
1F:推 ckc1ark: 如果栏位没有什麽意外 我想法是把;和\n都换成\0再用xargs 10/09 14:04
2F:→ ckc1ark: tr '\n;' '\0'<input.txt|xargs -0 -n2 bash -c 'touch - 10/09 14:05
3F:→ ckc1ark: d $0 "$1"' 10/09 14:05
4F:→ ckc1ark: tr '\n;' '\0'<input.txt|xargs -0 -n2 touch -d 10/09 14:07
5F:→ ckc1ark: 如果没要换顺序的话可以这样写 10/09 14:07
6F:→ losepacific: awk -F';' '{print "touch -d "$1" \""$2"\""}' 10/09 19:09
7F:→ losepacific: 如果栏位资料有跨行,那需要'BEGIN{RS=某}'修正 10/09 19:25
8F:→ HamalAri: 用 read 写回圈一行一行读 10/09 20:31
9F:推 rickieyang: 我都用 awk printf 出指令,pipe 给 sh - 10/10 01:55
10F:→ changyj: IFS=';' 10/11 11:38
11F:→ changyj: while read one two three others 10/11 11:39
12F:→ changyj: do echo "$one,$two,$three,$others" 10/11 11:40
13F:→ changyj: done < 要读入的档案 10/11 11:40
14F:→ changyj: unset IFS 10/11 11:41
15F:→ changyj: 第一个栏位会存入one, 第二个会存入 two, ... 10/11 11:42
16F:→ changyj: read 後面接四个变数,第一二三栏位会存入前三个变数, 10/11 11:42
17F:→ changyj: 第四个栏位及以後会存入第四个变数 10/11 11:43
18F:→ LIAR: 感谢各位 10/22 23:15