比较两个文件,使用共同的第一列和第二列打印行并创建新表

时间:2016-08-26 16:44:47

标签: bash

我正在使用Bash shell。

我有两个文本文件。

第一行的第一行:

Datum           Diffuse Radiation   Global Radidation   Direkte_Strahlung   Minute
26.02.13 12:23  240,5   783,5   543 23
26.02.13 12:24  243,8   752 508,2   24
26.02.13 12:25  248,9   660 411,1   25
26.02.13 12:26  262,2   653,7   391,5   26
26.02.13 12:27  281,3   612,4   331,1   27
26.02.13 12:28  315,1   864,8   549,7   28

第二个档案的第一行:

Date    Time (past local midnight)  Solar Zenith Angle (deg)    Cos_Zenitwinkel Luftmasse
26.02.13    0:00:00 161,7649831 -0,949780987    -1,052874308
26.02.13    0:06:00 161,7258048 -0,949566797    -1,053111801
26.02.13    0:12:00 161,5769749 -0,948749087    -1,054019459
26.02.13    0:18:00 161,3211217 -0,947328405    -1,055600143
26.02.13    0:24:00 160,9625742 -0,945305712    -1,057858836

两个文本文件都使用制表符分隔。在第一个文件中只是日期和小时之间的空格 - 我的问题是:我想从每个文件中获取这些行作为具有公共日期和输出的输出。小时。

我的想法是逐行比较文件和命令,得到一个txt.file作为输出,它们具有共同的所有日期和小时 - > common_date.file

然后我将common_date.file与第一个文件进行比较,得到一个只包含日期&的新文件。 common_date.file的小时数(但打印整行!)。然后我用第二个文件做同样的事情。

我知道有一个命令-diff用于获取两个文件的区别。

我已经尝试了grep -F -x -f,但它也没有用。我认为它应该适用于grep!

也许我这样解释我的愿望:

我想获得两个带有日期和时间的新文件。他们有共同的时间。这样两个文件的长度相等,我可以用时间轴制作一个图。

1 个答案:

答案 0 :(得分:0)

您可以在file2中grep file1的子字符串,反之亦然。你会找到

的子串
<input id="autocomplete" onFocus="geolocate()" type="text">

<script>
      // This example displays an address form, using the autocomplete feature
      // of the Google Places API to help users fill in the information.

      // This example requires the Places library. Include the libraries=places
      // parameter when you first load the API. For example:
      // <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places">

      var placeSearch, autocomplete;
      var componentForm = {
        street_number: 'short_name',
        route: 'long_name',
        locality: 'long_name',
        administrative_area_level_1: 'short_name',
        country: 'long_name',
        postal_code: 'short_name'
      };

      function initAutocomplete() {
        // Create the autocomplete object, restricting the search to geographical
        // location types.
        autocomplete = new google.maps.places.Autocomplete(
            /** @type {!HTMLInputElement} */(document.getElementById('autocomplete')),
            {types: ['geocode']});

        // When the user selects an address from the dropdown, populate the address
        // fields in the form.
        autocomplete.addListener('place_changed', fillInAddress);
      }

      function fillInAddress() {
        // Get the place details from the autocomplete object.
        var place = autocomplete.getPlace();

        for (var component in componentForm) {
          document.getElementById(component).value = '';
          document.getElementById(component).disabled = false;
        }

        // Get each component of the address from the place details
        // and fill the corresponding field on the form.
        for (var i = 0; i < place.address_components.length; i++) {
          var addressType = place.address_components[i].types[0];
          if (componentForm[addressType]) {
            var val = place.address_components[i][componentForm[addressType]];
            document.getElementById(addressType).value = val;
          }
        }
      }

      // Bias the autocomplete object to the user's geographical location,
      // as supplied by the browser's 'navigator.geolocation' object.
      function geolocate() {
        if (navigator.geolocation) {
          navigator.geolocation.getCurrentPosition(function(position) {
            var geolocation = {
              lat: position.coords.latitude,
              lng: position.coords.longitude
            };
            var circle = new google.maps.Circle({
              center: geolocation,
              radius: position.coords.accuracy
            });
            autocomplete.setBounds(circle.getBounds());
          });
        }
      }
    </script>
    <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyADbpfJGWwRh5um_gd2gNySgrI5FAy2RZk&libraries=places&callback=initAutocomplete" async defer></script>

您可以将cut -d $'\t' -f1-2 file2 |sed 's/\t/ /g' cut -d $'\t' -f1 file1 |sed 's/ /\t/g' 的输出存储在临时文件中,并使用cut-sed进行临时文件的grepping。
您可以使用进程替换来避免临时文件:

grep -f