linux - 在for循环中将一个文件中的两列分隔为两个单独的文件

标签 linux shell unix scripting

一个输入文件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 是空白的。

请帮忙。

最佳答案

将第 1 列和第 2 列写入单独的文件:

awk '{print $1>"/path/to/C_ffid"; print $2>"/path/to/N_ffid"}' list_c

工作原理

  • 打印 $1>"/path/to/C_ffid"

    此命令将第一列写入文件 /path/to/C_ffid

  • 打印 $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

shell 中的循环和处理

while read one two
do
   echo "$one">>C_ffid
   echo "$two">>N_ffid
   echo "Processing $one and $two"
done <list_c

关于linux - 在for循环中将一个文件中的两列分隔为两个单独的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37359822/

相关文章:

linux - 在 Linux 上安排一条 zenity 消息

linux - 如何修复导入证书文件中的 ‘Certificate Import Error: The Private Key for this Client Certificate is missing or invalid' 错误

linux - 如何遍历 .txt 并将每行的值用作变量 Linux Shell

linux - 如何在 shell 中将定义的值调用为循环

linux - awk - 如何输出 "re-awk"?

linux - 使用命令行将HDFS文件作为附件发送

c++ - 获取系统时间和用户时间

php - 无法正常启动XAMPP

unix - PowerShell 是否已准备好替换 Windows 上的 Cygwin shell?

linux - 在交互式和非交互式 shell 模式下运行 ssh 之间有区别吗?