【问题标题】:splitting files concatinated by tail分割由tail连接的文件
【发布时间】:2017-04-19 17:04:05
【问题描述】:

我正在从远程网络服务器复制 php 文件。我用过[这个][1] 命令是

tail -n +1 file1.txt file2.txt file3.txt

用于连接,但现在我想将该文件拆分为单独的文件。

我确实尝试过,并且可以使用此命令分别获取另一个文件中文件名行和文件名的所有行号。

 grep -irn "==>" php.dump |cut -d: -f1

 grep -irn "==>" php.dump |cut -d' ' -f2 

现在我想用这个信息来分割文件。

这是一个冗长的方法,你们可以建议任何直接的方法。 或者这两个命令之后要做的任何事情

我确信必须有一些东西可以做到这一点,因为它通常用于转储。

注意: 我知道使用 tar 会很容易,但遗憾的是没有 tar 命令,也没有该服务器的 root 权限。

cat multiple files but include filename as headers

【问题讨论】:

  • 一开始就不要合并它们吗?for i in {1,2,3};do tail -n +1 "file${i}.txt" >"newfile.${1}";done.
  • 嗨,感谢您的回复,但我这样做的全部原因是为了替代 tar。因为 tar 在另一台机器上组合文件和提取。我正在使用 out tar 命令执行此操作,因为它不可用。
  • 为什么不直接传输文件?尝试模拟 tar 确实没有任何好处。

标签: python linux bash split tail


【解决方案1】:

既然你用的是穷人tar -c这里是穷人tar -x

$ awk 'match($0, /^==> (\w+) <==$/, res) { file = res[1]; next }
                                         { print > file".new" }' comb_file.txt

输入如下:

==> file1 <==
hello1

==> file2 <==
hello2

==> file3 <==
hello3

将创建三个文件:file1file2file3,每个文件都包含==&gt; xxx &lt;== 之间的行。

这意味着将在file1file2 中添加一个尾随空行。但它可能会让你开始。

【讨论】:

  • 嗨,我尝试了给定的转储,但我有像 /var/www/index.php 这样的文件名,所以它不起作用,但它确实适用于您的转储,您能提出一些通用的建议吗
  • @Devidas 应该可以根据您的需要进行修改,即删除目录名:/^==&gt; ([^\/]*\/)*([^\/]+) &lt;==$/,然后使用res[2]
  • 问题是正则表达式正在寻找所有单词字符,但它得到了像 / 这样的空间字符,所以它不匹配
  • 而你使用“.new”的目的是什么?
  • @Devidas 不适合任何人,主要是为了让您更改以撤消,如果您这样做了tail -n +1 a b c | awk ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 2018-11-18
  • 2019-08-26
相关资源
最近更新 更多