我有一堆随机文件,我将在每个文件上运行LINUX-file命令。 Linux屏幕如下
m7% file date-file.csv
date-file.csv: ASCII text, with CRLF line terminators
m7% file image-file.JPG
image-file.JPG: JPEG image data, EXIF standard
只有当Linux说该文件是文本文件时,我才想运行一个遍历该文件的R脚本并查找所有列名。在上面的屏幕中,我想只在第一个文件上运行R脚本。我怎么能实现这个条件处理?
有什么方法可以从R运行Linux命令?如果我可以这样做,那么我可以分析Linux命令给出的输出,看它是否包含文本,然后我可以根据需要执行R脚本。
我很难实现这一目标并且感谢任何帮助
答案 0 :(得分:6)
尝试system()
08/27 7:08 [nodakai@kaidev01] ~/R$ R -q
> system("ls /")
bin boot dev etc home initrd.img initrd.img.old lib lib32 lib64 libGL.so libnss3.so lost+found media mnt opt proc root run sbin selinux sftp srv sys tmp usr var vmlinuz vmlinuz.old
> x = system("ls", TRUE)
> x
[1] "a.csv" "abi.pdf"
[3] "b.csv" "image.jpeg"
[5] "x86_64-pc-linux-gnu-library"
> for (f in system("ls", TRUE)) { if (length(grep("ASCII", system(paste("file", f), TRUE)))) { print(f) } }
[1] "a.csv"
[1] "b.csv"
如果您确定所有文件都以" .csv"结尾是纯文本CSV文件,只需使用Sys.glob()
> list.files()
[1] "a.csv" "abi.pdf"
[3] "b.csv" "image.jpeg"
[5] "x86_64-pc-linux-gnu-library"
> Sys.glob("*.csv")
[1] "a.csv" "b.csv"