我在目录中有一堆文件,每个文件都有一行文本。我想将所有这些文件(所有一个衬里)都放在一个大文件中。但是,当我使用时cat,参数太多。我该如何解决?
我有一个名为pids.txt的文件,其中包含行,如下所示:
123
456
789
Run Code Online (Sandbox Code Playgroud)
然后,我写了一个Python脚本,它对每一行做了一些事情.Python脚本运行如下:
my_script.py 123 456 789 -a "something here" -b "something else"
Run Code Online (Sandbox Code Playgroud)
我被困在我想要运行Unix命令的部分,将pids.txt的输出传递给my_script.py.我想你必须和猫做点什么吗?
(这不起作用)
cat pids.txt | ./myscript.py -a "something here" -b "something else"
Run Code Online (Sandbox Code Playgroud)
任何的想法?
如标题中所述,我试图通过一个ssh连接捕获多个文件(内容需要附加到主机上的现有文件),并获取每个文件的返回值,即特定文件的cat是否成功.到目前为止,我单独为每个文件执行此操作,只需对每个文件重复以下命令并检查返回值.
cat specific_file | ssh user@host -i /root/.ssh/id_rsa "cat >> result/specific_file"
Run Code Online (Sandbox Code Playgroud)
然后我只检查每次传输的返回值(自动),从而可以确定每个文件的状态.我的问题是:是否有可能通过一个单独的ssh连接,但获得每个文件的返回值?
提前致谢 !
编辑:
(b)如下所示,我为一个特定文件生成一个命令,然后检查返回码.然后为不同类型o调用包含该部分程序的方法
如果文件已成功记录,则可以从客户端删除该文件,并且(仍)允许进一步记录到文件类型.如果文件超出其限制,则在程序的另一部分中取消设置该位.
sprintf(command,"/bin/cat /root/%s%s | /usr/bin/ssh log-bot@192.168.5.1 -i"
" /root/.ssh/id_rsa \"/bin/cat >> result/%s%s\"", apmac,
ending_str[source], apmac, ending_str[dest]);
rc = system(command);
if(rc != 0)
{
sprintf(buffer, "[%i] - LOG ERROR from %s to %s CODE %i ", (int)time(0),
ending_str[source], ending_str[dest], rc);
sprintf(filename,"%s%s%s", LOCAL, apmac, ending_str[source]);
}
else
{
sprintf(filename,"%s%s%s", LOCAL, apmac, ending_str[source]);
remove(filename);
sprintf(buffer, "[%i] - LOG process from %s to %s ok", (int)time(0),
ending_str[source], …Run Code Online (Sandbox Code Playgroud) 我想在R中打印一个文件的头.我知道如何使用R支持的read.table和其他输入方法.我只想知道读取文件中的unix命令cat或head的R替代方法并打印一些他们.
谢谢,
SangChul
我正在使用bash从文件中提取行,如下所示:
for line in $(sed -n 3~6p file)
do
echo $line
done
Run Code Online (Sandbox Code Playgroud)
但是,我现在有些行是空的/空白的,并且这些行没有打印,因此在表单上给我一个输出:
line3
line9
line21
line27
Run Code Online (Sandbox Code Playgroud)
我想要打印空行,以便我获得:
line3
line9
line21
line27
Run Code Online (Sandbox Code Playgroud)
关于如何实现这一点的任何建议?
我正在使用此命令
cat text.csv | while read a ; do grep $a text1.csv >> text2.csv; done
Run Code Online (Sandbox Code Playgroud)
text.csv具有完整路径的文件名.文件名有空格.
示例:C:\ Users\Downloads\File Name.txt
text1.csv包含显示用户标识的日志和包含完整路径的文件名.
示例:MyName,C:\ Users\Downloads\File Name.txt
当我运行命令时,我得到并且错误
grep: Name: No such file or Directory
Run Code Online (Sandbox Code Playgroud)
我知道错误是因为文件名中的空格.我想知道如何删除此错误.
我正在尝试使用sed命令更改/ etc / hosts文件,我使用sudo执行以下命令
sudo sed 's/127.0.0.1 localhost/127.0.0.1 localhost mydomain.com/g' /etc/hosts |sudo cat > /etc/hosts
Run Code Online (Sandbox Code Playgroud)
但这是我得到的错误
-bash: /etc/hosts: Permission denied
Run Code Online (Sandbox Code Playgroud) 以下cat命令似乎在for循环之外正常工作但是当我将它置于其中时会出现语法错误:
for i in 1 2 3 4 5 do
cat file_$i | grep "random text" | cut -d':' -f2 > temp_$i
done
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释写这个的正确方法吗?谢谢
我编写了一个脚本,包括以下循环:
#!/bin/bash
cat "$1" | while read -r line; do
echo "$line"; sleep 2;
done
Run Code Online (Sandbox Code Playgroud)
一个shellcheck运行扑灭了以下信息:
SC2002:没用的猫。考虑'cmd <文件| ..”或“ cmd文件| ..”。
我将脚本更改为:
#!/bin/bash
cmd < "$1" | while read -r line; do
echo "$line"; sleep 2;
done
Run Code Online (Sandbox Code Playgroud)
但是现在bash退出并显示:
cmd:找不到命令
我做错了什么?
想象一下,我有一个包含许多子目录的目录,每个子目录包含一些具有相同结构的CSV文件(相同的列数,并且都包含相同的标题).
我知道我可以从父文件夹运行类似的东西
find ./ -name '*.csv' -exec cat {} \; > ~/Desktop/result.csv
Run Code Online (Sandbox Code Playgroud)
这将工作正常,期望每次重复标题(每个文件一次).
我也知道我可以做类似的事情sed 1d <filename>或tail -n +<N+1> <filename>跳过文件的第一行.
但就我而言,它似乎更专业.我想为第一个文件保留一次标题,然后跳过每个文件的标题.
是否有人知道使用标准Unix工具(如find,head,tail,sed,awk等)和bash实现这一目标的方法?
例如输入文件
/folder1
/file1.csv
/file2.csv
/folder2
/file1.csv
Run Code Online (Sandbox Code Playgroud)
每个文件都有标题:
A,B,C 每个文件都有一个数据行 1,2,3
期望的输出是:
A,B,C
1,2,3
1,2,3
1,2,3
Run Code Online (Sandbox Code Playgroud)
我觉得这是像其他问题不同的这个和这个特别,因为这些解决方案的参考文件1和文件2的解决方案.我的问题是关于一个具有任意数量文件的目录结构,我不希望逐个输出每个文件.