当前位置: 首页 > 面试题库 >

为什么unix读时不读最后一行?

金谭三
2023-03-14
问题内容

我的剧本

export IFS=":"

cat hello | while read a b c d; do
    echo $a,$b,$c,$d
done

我的档案 hello

1:1:1:1
2:2:2:2
3:3:3:3

我的输出

1,1,1,1
2,2,2,2

如果我3:3:3:3hello之后放一个空白行,则输出变为

1,1,1,1
2,2,2,2
3,3,3,3

任何人都知道如何解决此问题,所以不需要在末尾添加空白行hello


问题答案:

发生的情况是,read输入未以换行符终止
时,命令将失败。由于文件末尾缺少换行符read,因此失败,因此将while跳过循环的最后一次迭代。

如果您不想/不能确保输入文件的末尾有换行符,可以将您的文件cat与进行分组,echo以使输入的 外观 以换行符终止,例如:

{ cat hello; echo; } | while read a b c d; do
    echo $a,$b,$c,$d
done

或像这样:

(cat hello; echo) | while read a b c d; do
    echo $a,$b,$c,$d
done


 类似资料:
  • 问题内容: 我想将jsoup解析为utf -8,但我不能。我尝试了我所知道的一切,然后在Google上进行了搜索。 我的目标是: 但是 不是。 请帮忙 问题答案: 淘汰 你好世界Öçasasa

  • 所以基本上,我添加了geckodriver。exe到Windows 10上的环境变量路径,正在尝试 仍然导致错误消息“Geckodriver”可执行文件需要安装在路径上 我在网上安装了Chrome和chromedriver.exe文件在Selenium上运行了chromeDrive 这是可行的,Google Chrome是开放的,所以现在我尝试在Firefox中添加路径,当路径建议出现时,sele

  • 问题内容: 编译Java文件时,它将生成一个.class文件。现在,此.class文件具有JVM解释的字节码。当我们在文本编辑器中打开.class文件时,它不是人类可读的。现在要查看字节码,可以使用像javap这样的反汇编程序。 我的问题是,为什么我们需要分解字节码才能查看字节码本身? 反汇编程序实际上是如何将.class文件转换为人类可读格式的? 问题答案: Java虚拟机模拟一台计算机。这就是

  • 在解决黑客级别的一个问题时,我面临着扫描器/Bufferedreader无法读取最后一个问题。因为它们提供的输入就像 因此,两个扫描器/BufferedReader都无法读取最后一行。如果输入类似,那么代码似乎可以正常工作。 (输入结束) 下面是我正在使用的示例代码。我知道我们需要在行的末尾有一个\r或\n来从scanner/bufferedreader读取行。但是任何人都可以提供解决这个问题的方

  • 我对Java和OOP都是新手。但是,我使用notify读取一个特征,然后使用read读取回调中的多个特征。 我想知道,为什么在使用readCharacteristic(我的特征)时,只能从单个特征(除了通知的特征)中获取值。蓝牙gatt回调声明如下: 公共布尔值 (BluetoothGattCharacteristic characteristic characteristic)从相关远程设备读取

  • 问题内容: 我了解了如何打开文件,然后对它们使用Python的内置函数。但是sys.stdin如何工作? sys.stdin的以上两种不同用法之间有什么区别?它从哪里读取信息?是通过键盘还是我们仍然需要提供文件? 问题答案: 因此,您使用了Python的“内置函数”,大概是这样的: 这通过在文件对象上调用 迭代器 来读取文件,而该 迭代器 恰巧从文件返回下一行。 您可以改用: 它将行从当前文件位置