【发布时间】:2021-05-19 20:24:47
【问题描述】:
我正在编写一个 bash 脚本,我需要获取文件中每一行的第二个字段,并将它们保存在另一个文件中。我知道有很多可能的方法可以做到这一点,但是,我首先尝试使用while read line; do,但我被卡住了。现在,我真的很想知道发生了什么。
例如,输入文件是:
line1 11111
line2 222222
line3 333
line4 4444
(字段分隔符为“\t”)。
这就是我正在做的:
inputfile=$1
cat $"inputfile" | while read -r line
do
cut -f2 >> results_file
done
问题是,输出将是:
222222
333
4444
(跳过第一行)
我已经测试了数百个修改,并尝试使用其他命令而不是 cut(例如,sed、grep...)。我会很感激一些帮助,或者有人指出我正确的方向。
非常感谢!
【问题讨论】:
-
尝试用dos2unix转换你的文件我以为你的文件是windows换行格式
-
您可以使用 echo 打印每一行,例如
while read -r line; do echo "$line" | cut -d$'\t' -f2; done < input.txt > results.txt或者你可以只使用 awk 例如awk '{print $2}' input.txt > results.txt。有很多方法可以做您想做的事 - 也许更多信息会帮助我们为您提供帮助 -
问题是,我需要一个循环,因为我输入的字段 2 实际上是 URL:我必须在列中生成一个包含此输入的字段 1 的文件,并从其下载特定信息另一列中的相应 URL。为了知道每个原始 URL 对应的是哪个下载的文件,我认为最好直接用循环来完成。我希望我能很好地解释自己......另外,我已经按照你的建议做了,但是在 de 选项
cut -d$'\t'中没有 de "$"。这是否意味着使用“\ t at the end”作为分隔符?顺便说一句,它完美地工作。非常感谢。
标签: bash