Bash 如何循环遍历文件的每一行,在第三个字段后命名文件,然后获取每一行的内容并将其放入文件中

Bash 如何循环遍历文件的每一行,在第三个字段后命名文件,然后获取每一行的内容并将其放入文件中,bash,Bash,比如说我有一份 这是一只猫 这是一只狗 这是一只熊 我想循环浏览这个文件,读取第四个字段,创建一个具有该名称的文件,然后通过bash将该行推送通过 #!/bin/bash while read line do echo $line var1 = `cat $line | awk '{print $4}'` echo $line >> ${var1}.txt done < animals.txt #/bin/bash 读行时 做 回音$线 var1=`cat$li

比如说我有一份

这是一只猫 这是一只狗 这是一只熊

我想循环浏览这个文件,读取第四个字段,创建一个具有该名称的文件,然后通过bash将该行推送通过

#!/bin/bash

while read line
do
  echo $line
  var1 = `cat $line | awk '{print $4}'`
  echo $line >> ${var1}.txt
done < animals.txt
#/bin/bash
读行时
做
回音$线
var1=`cat$line | awk'{print$4}'`
echo$line>>${var1}.txt
done

您需要一个名为cat.txt的文件,该文件的行为this is a cat,依此类推。您有两个特定的问题,但离问题不远

1)
cat
用于文件,而不是bash变量。您可以对bash变量使用
echo

2) 赋值运算符
=
在bash中的左边不能有任何空间

因此,您的第6行现在看起来如下所示:

  var1=`echo $line | awk '{print $4}'`
在这一更改之后,在我的系统上,会生成一个名为
cat.txt
的文件,该文件的文本与
anivers.txt
中的单行相同

$ ls
animals.txt  q.sh
$ cat animals.txt 
this is a cat this is a dog this is a bear
$ cat q.sh 
#!/bin/bash

while read line
do
  echo $line
  var1=`echo $line | awk '{print $4}'`
  echo $line >> ${var1}.txt
done < animals.txt
$ bash q.sh
this is a cat this is a dog this is a bear
$ cat cat.txt 
this is a cat this is a dog this is a bear
$ls
animals.txt q.sh
$cat anists.txt
这是一只猫这是一只狗这是一只熊
$cat q.sh
#!/bin/bash
读行时
做
回音$线
var1=`echo$line | awk'{print$4}'`
echo$line>>${var1}.txt
done
有没有办法让你的问题更清楚一点?如果我理解正确,你想记下每四个字吗?然后创建一个文件谁的名字是第四个单词,前三个单词(包括第四个)作为文件的内容?是的,这就是我想做的输入文件中的句子之间应该有新行吗?还是应该是一条线?下面我的答案回答了您的书面问题(它提供了语法的修正,可能会妨碍您自己解决这个问题)。但是bash中的行与字符串解析是非常不同的,所以您必须澄清您的问题。我将对其进行测试,如果正确的话,将授予您信用。ThxI已授予您解决方案的信用。我感谢大家的大力支持!