输入文件 list_c ,如下所示:
00000981.ffid 00000982.ffid
00000982.ffid 00000983.ffid
00000983.ffid 00000984.ffid
00000984.ffid 00000985.ffid
00000985.ffid 00000986.ffid
00000986.ffid 00000987.ffid
00000987.ffid 00000988.ffid
00000988.ffid 00000989.ffid
00000989.ffid 00000990.ffid
00000990.ffid 00000991.ffid
00000991.ffid 00000992.ffid
00000992.ffid 00000993.ffid
00000993.ffid 00000994.ffid
00000994.ffid 00000995.ffid
00000995.ffid 00000996.ffid
00000996.ffid 00000997.ffid
00000997.ffid 00000998.ffid
00000998.ffid 00000999.ffid
00000999.ffid 00001000.ffid
00001000.ffid 00001001.ffid
00001001.ffid 00001002.ffid
00001002.ffid 00001003.ffid
00001003.ffid 00001004.ffid
00001004.ffid 00001005.ffid
00001005.ffid 00001006.ffid
00001006.ffid 00001007.ffid
00001007.ffid
我想将两列分成两个独立的变量,并在循环中使用它们来生成两个输出文件。
我正在使用此代码:
for filename in $(cat /d/home/adira0151/Desktop/tmp/list_c)
do
echo "$filename" | awk '{print $1}' >> /d/home/adira0151/Desktop/tmp/C_ffid
echo "$filename" | awk '{print $2}' >> /d/home/adira0151/Desktop/tmp/N_ffid
done
但我得到的是 C_ffid :
00000981.ffid
00000982.ffid
00000982.ffid
00000983.ffid
00000983.ffid
00000984.ffid
00000984.ffid
00000985.ffid
00000985.ffid
00000986.ffid
00000986.ffid
00000987.ffid
00000987.ffid
00000988.ffid
00000988.ffid
00000989.ffid
00000989.ffid
00000990.ffid
00000990.ffid
00000991.ffid
00000991.ffid
00000992.ffid
00000992.ffid
00000993.ffid
00000993.ffid
00000994.ffid
00000994.ffid
00000995.ffid
00000995.ffid
00000996.ffid
00000996.ffid
00000997.ffid
00000997.ffid
00000998.ffid
00000998.ffid
00000999.ffid
00000999.ffid
00001000.ffid
00001000.ffid
00001001.ffid
00001001.ffid
00001002.ffid
00001002.ffid
00001003.ffid
00001003.ffid
00001004.ffid
00001004.ffid
00001005.ffid
00001005.ffid
00001006.ffid
00001006.ffid
00001007.ffid
00001007.ffid
而另一个文件 N_ffid 是空白的。
请帮忙。
答案 0 :(得分:1)
将第1列和第2列写入单独的文件:
awk '{print $1>"/path/to/C_ffid"; print $2>"/path/to/N_ffid"}' list_c
print $1>"/path/to/C_ffid"
此命令将第一列写入文件/path/to/C_ffid
。
print $2>"/path/to/N_ffid"
此命令将第二列写入文件/path/to/N_ffid
。
对于输入文件,将创建以下两个输出文件:
$ cat C_ffid
00000981.ffid
00000982.ffid
00000983.ffid
00000984.ffid
00000985.ffid
00000986.ffid
00000987.ffid
00000988.ffid
00000989.ffid
00000990.ffid
00000991.ffid
00000992.ffid
00000993.ffid
00000994.ffid
00000995.ffid
00000996.ffid
00000997.ffid
00000998.ffid
00000999.ffid
00001000.ffid
00001001.ffid
00001002.ffid
00001003.ffid
00001004.ffid
00001005.ffid
00001006.ffid
00001007.ffid
和
$ cat N_ffid
00000982.ffid
00000983.ffid
00000984.ffid
00000985.ffid
00000986.ffid
00000987.ffid
00000988.ffid
00000989.ffid
00000990.ffid
00000991.ffid
00000992.ffid
00000993.ffid
00000994.ffid
00000995.ffid
00000996.ffid
00000997.ffid
00000998.ffid
00000999.ffid
00001000.ffid
00001001.ffid
00001002.ffid
00001003.ffid
00001004.ffid
00001005.ffid
00001006.ffid
00001007.ffid
while read one two
do
echo "$one">>C_ffid
echo "$two">>N_ffid
echo "Processing $one and $two"
done <list_c
答案 1 :(得分:1)
代码中的问题是,您正在使用awk来打印column1和column2。 awk命令使用space作为列分隔的分隔符。在您的文件中,两列之间有多个空格。因此,只有第二个文件为空。如果你想要它在awk中,改变你的文件,两列之间有一个空格并执行。它也会起作用。
否则,
您可以使用cut命令将其分隔并将其存储到变量中。在开始时,您可以在循环中使用这些变量。
假设两列之间都有选项卡。以下代码将满足您的期望。 var1变量包含第一列值,var2变量包含seconds列值。
var1=`cut -d' ' -f1 list_c`
var2=`cut -d' ' -f2 list_c`
for filename in $var1
do
echo "$filename" >>C_ffid
done
for filename in $var2
do
echo "$filename" >>C_ffid1
done
但是以任何方式确保在cut命令或awk命令中分隔分隔符。
答案 2 :(得分:0)
POSIX shell脚本,概念上类似于OP的代码, sans awk :
cd /d/home/adira0151/Desktop/tmp/
while read a b ; do
echo "$a" >> C_ffid
echo "$b" >> N_ffid
done < list_c
答案 3 :(得分:0)
使用剪切,假设* list_c_ 标签分开:
cd /d/home/adira0151/Desktop/tmp/
cut -f 1 < list_c > C_ffid
cut -f 2 < list_c > N_ffid
如果 space 分开,这将起作用:
tr -s ' ' '\t' < list_c | cut -f 1 > C_ffid
tr -s ' ' '\t' < list_c | cut -f 2 > N_ffid
注意,运行一个输入文件两次是效率低下的,这些将受益于使用并行输入工具,如 pee ,例如:
tr -s ' ' '\t' < list_c | pee "cut -f 1 > C_ffid" "cut -f 2 > N_ffid"
或者,如果标签分开:
pee "cut -f 1 > C_ffid" "cut -f 2 > N_ffid" < list_c