【问题标题】:No way to move pound (£) symbol in UNIX?无法在 UNIX 中移动英镑 (£) 符号?
【发布时间】:2020-07-05 08:32:12
【问题描述】:

需要在每行的开头获取分隔符,以下是示例输入和输出文件以供参考。实际使用的分隔符是(£{,^$^) 注意 - 要重新排列的文件有大量数据

试过以下方法还是不行:

tr £{ \\n
sed 's/£{/\n/g' 
awk '{ gsub("£{", "\n") } 1'
         

输入文件:

 £{firstlinecontinues£{secondstartsfromhereandit
  keepsoncontinueingtillend£{herecomes3rdand£{fi
  nallyfourthisalsohere

输出文件:

£{firstlinecontinues
£{secondstartsfromhereanditkeepsoncontinueingtillend
£{herecomes3rdand
£{finallyfourthisalsohere

【问题讨论】:

  • 不完全是,但部分是的,我仍在寻找解决方案。
  • 这些奇怪的分隔符可能表明另一个潜在问题。这对你有用吗? echo "£{1£{2£{3" | sed 's/£{/\n&/g' 如果是这样,您的数据文件可能有问题。
  • 不,这也不起作用,生成的文件没有任何变化,下面的命令部分适用于我,但我无法在每行的开头打印分隔符 awk '{ gsub("\ £{", "\n") } 1'
  • 这里没有文件,只有一对命令从给定的输入中创建(如果成功)三行,这是它的一部分。

标签: unix awk sed


【解决方案1】:

使用 GNU awk 进行多字符 RS 和 \s

$ awk -v RS='£{' 'NR>1{gsub(/\s/,""); print RS $0}' file
£{firstlinecontinues
£{secondstartsfromhereanditkeepsoncontinueingtillend
£{herecomes3rdand
£{finallyfourthisalsohere

【讨论】:

  • 很高兴您的回复,我尝试运行该命令但最终没有输出,文件保持不变,但没有错误
  • 谁能给个回复,我被卡住了
  • 该命令并非旨在修改文件,它会产生输出,正如您在我的回答中看到的那样。如果它没有产生任何输出,那么要么 a) 您的真实输入看起来不像您问题中的示例(特别是您没有包含 £{ 的行),或者 b) 您错误地复制/粘贴了我的脚本。
【解决方案2】:
awk 'BEGIN{RS="(£{\|\^\$\^)"; OFS=ORS=""}{$1=$1;print $0 (FNR>1?"\n":"") RT}' file

【讨论】:

  • 感谢,但它不会将分隔符移动到下一行,如输出文件中所示
  • 它实际上是压缩文件而不是创建以分隔符开头的新行
  • 这适用于我的环境; GNU Awk 4.1.4 和 Bash = 4.4.12(1)-release
【解决方案3】:

由于 £ 符号由两个八进制代码 302 和 243 表示,因此我能够使用以下 perl 命令生成所需的结果:

perl -pe 's/(\302\243)/\n$1/g' data.txt

注意:这是我在系统上看到的内容:

echo "£" | od -c
0000000 302 243  \n
0000003

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 2013-04-06
    相关资源
    最近更新 更多