以下是我试图操作的文本文件的片段:
845136006577 1.0
845136006638 4.0
845136006676 6.0
845136007895 3.0
845136007970 7.0
845136008052 9.0
845136008175 4.0
845136008298 4.0
845136008373 4.0
845136008410 4.0
845136008557 3.0
845136008595 4.0
我正在尝试将每行上的所有空格压缩为单个,
(逗号)。
以下是我的尝试:
tr -s '[:space:]' ',' < file.txt
tr -s ' ' ',' < file.txt
但输出总是如下:
845136006577,,,,,,,,,,,,,,1.0,
845136006638,,,,,,,,,,,,,,4.0,
845136006676,,,,,,,,,,,,,,6.0,
845136007895,,,,,,,,,,,,,,3.0,
845136007970,,,,,,,,,,,,,,7.0,
845136008052,,,,,,,,,,,,,,9.0,
845136008175,,,,,,,,,,,,,,4.0,
845136008298,,,,,,,,,,,,,,4.0,
845136008373,,,,,,,,,,,,,,4.0,
我的文件存在潜在的编码问题吗?有些事情不对。
更新
xxd < file.txt
的输出片段:
00003b0: 3600 3000 3000 3800 3500 3500 3700 2000 6.0.0.8.5.5.7. .
00003c0: 2000 2000 2000 2000 2000 2000 2000 2000 . . . . . . . .
00003d0: 2000 2000 2000 2000 2000 3300 2e00 3000 . . . . .3...0.
00003e0: 2000 0a00 3800 3400 3500 3100 3300 3600 ...8.4.5.1.3.6.
00003f0: 3000 3000 3800 3500 3900 3500 2000 2000 0.0.8.5.9.5. . .
0000400: 2000 2000 2000 2000 2000 2000 2000 2000 . . . . . . . .
0000410: 2000 2000 2000 2000 3400 2e00 3000 2000 . . . .4...0. .
0000420: 0a00 3800 3400 3500 3100 3300 3600 3000 ..8.4.5.1.3.6.0.
0000430: 3000 3800 3600 3900 3400 2000 2000 2000 0.8.6.9.4. . . .
0000440: 2000 2000 2000 2000 2000 2000 2000 2000 . . . . . . . .
0000450: 2000 2000 2000 3500 2e00 3000 2000 0a00 . . .5...0. ...
0000460: 3800 3400 3500 3100 3300 3600 3000 3000 8.4.5.1.3.6.0.0.
答案 0 :(得分:5)
由于文件中充满了空字符,因此您可以在使用tr进行处理之前将其删除(假设您不需要任何空字符)。
使用tr两次
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
使用单个perl
otherFunction <- function(df, ...){
...
}
myFunction <- function(df){
result <- tryCatch({
otherFunction(df, ...)
}, error = function(e) {
NA # the result is always being set to NA
})
return result
}
...
myDf <- ...
myFunction(myDf)
error: "could not find function "otherFunction""
或者如果您想保留编码
tr -d '\0' < file | tr -s '[:blank:]' ','
或者可能最强大,您可以设置perl的编码来读取。
perl -pe 's/\x00//g;s/[[:blank:]]+/,/' file
答案 1 :(得分:2)
您的输入被编码为UTF-16(或UCS-2),但您正在将其读取为ASCII(或UTF-8,ISO-8859或类似),因此您会看到备用ASCII和空值。
所以这些空间似乎都被NUL分开,并且不会被合并。
一种解决方法是通过iconv
并返回(假设您希望结果采用相同的编码):
iconv -f utf-16 -t utf-8 \
| tr -s '[:blank:]' ',' \
| iconv -f utf-8 -t utf-16
显然,如果您希望输出为UTF-8,则可以跳过最后的重新编码步骤。
您无法使tr
或其他标准实用程序与UTF-16或UCS-2本机一起使用,因此如果您不想更改为Perl或蟒。