使用awk时如何防止换行

xine78

我已经看到了这个问题的几种变体,但是没有一个答案对我的特定情况有所帮助。

我正在尝试加载一些文件,为文件名添加一列。仅当我将文件名放在第一列时,此方法才能正常工作。如果我将文件名列放在末尾(我想要的位置),它将在$ 0和我无法停止的其余打印内容之间创建新行。

for f in "${FILE_LIST[@]}"
do
awk '{ print FILENAME,"\t",$0 } ' ${DEST_DIR_FILES}/$f > tmp ## this one works
awk '{ print $0,"\t",FILENAME } ' ${DEST_DIR_FILES}/$f > tmp ## this one does not work
mv tmp ${DEST_DIR_FILES}/$f
done > output 

示例数据:

-我从这个开始:

A       B       C
aaaa    bbbb    cccc
1111    2222    3333

-我想要这个(带有文件名的新列):

A       B       C       FILENAME
aaaa    bbbb    cccc    FILENAME
1111    2222    3333    FILENAME            

-我得到这个(\ t和文件名在新行上):

A       B       C
        FILENAME
aaaa    bbbb    cccc
        FILENAME
1111    2222    3333
        FILENAME

额外的问题是,我使用变量来传递文件名,但这是整个路径。最好仅打印文件名(不带路径)的最佳方法是使用保存路径的变量或将路径删除掉。

克里斯·西摩

几乎可以肯定的是,由于awk脚本在语法上是正确的,因此行结尾问题我怀疑您的文件"${FILE_LIST[@]}"来自Windows框,并且具有\r\n行尾。要确认给定文件的行尾,您可以file在每个文件上运行命令, file filename

# create a test file
$ echo test > foo      

# use unix2dos to convert to Windows style line endings
$ unix2dos foo       
unix2dos: converting file foo to DOS format ...

# Use file to confirm line endings
$ file foo       
foo: ASCII text, with CRLF line terminators

# Convert back to Unix style line endings
$ dos2unix foo
dos2unix: converting file foo to Unix format ...

$ file foo
foo: ASCII text

要将文件转换为Unix样式的行尾,请\n运行以下命令:

$ for "f" in "${FILE_LIST[@]}"; do; dos2unix "$f"; done

说明:

FILENAME是行的第一个字符串时,回车\r实际上不会执行任何操作,因为我们已经在行的开头。当我们尝试FILENAME在其他任何字符之后打印时,我们看到带到下一行开头的效果,先打印TAB,然后打印FILENAME

边注:

Awk具有OFS用于设置输出字段分隔符的变量,因此:

$ awk '{print $0,"\t",FILENAME}' file

可以改写为:

$ awk '{print $0,FILENAME}' OFS='\t' file

奖励答案

IMO剥离文件路径的最佳方法是使用该实用程序basename

$ basename /tmp/foo
foo

使用命令替换

$ awk '{print FILENAME}' $(basename /tmp/foo)
foo

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用:r!date和其他shell命令时,如何防止Vim中的换行符?

来自分类Dev

在文本插值 (Ruby) 中使用换行符时如何防止转义

来自分类Dev

如何防止自动换行

来自分类Dev

如何防止TD换行?

来自分类Dev

当输出比控制台宽时,如何防止自动换行?

来自分类Dev

如何防止项目文字换行

来自分类Dev

如何防止标签自动换行?

来自分类Dev

使用toggle()时如何正确防止冒泡?

来自分类Dev

使用KnockoutJS时如何防止注入攻击?

来自分类Dev

使用TIdHTTPServer时如何防止“ MySql消失”

来自分类Dev

使用DecimalFormat时如何防止减号?

来自分类Dev

使用* ngIf时如何防止闪烁?

来自分类Dev

使用toggle()时如何正确防止冒泡?

来自分类Dev

在序列化多维数组时,如何防止JsonWriter添加太多换行符?

来自分类Dev

CSS使用文本溢出时可防止DIV换行:省略号

来自分类Dev

如何防止div的内容开始换行

来自分类Dev

内嵌图像后如何防止换行?

来自分类Dev

如何防止div中的按钮换行

来自分类Dev

如何防止它在HTML中换行?

来自分类Dev

使用Razor条件语句防止换行

来自分类Dev

使用Prism.js防止自动换行

来自分类Dev

使用jekyll,kramdown和rouge防止换行

来自分类Dev

如何在使用substring_index时摆脱换行空间

来自分类Dev

使用Jsoup.parse时如何保持换行符?

来自分类Dev

使用XElement时如何包含换行符?

来自分类Dev

对jQuery使用.text()方法时如何保持换行符?

来自分类Dev

使用echo在C语言中写入文件时如何换行

来自分类Dev

使用Formatter.format时如何输出换行?

来自分类Dev

使用appendTo(),insertAfter()等时,如何包含换行符?

Related 相关文章

热门标签

归档